function compileLocationListPage(self)
{   
    self.LocationListPage = Class.create(Page,
    {
    	/**
    	 * HTML for result title.
    	 */
    	RESULT_HTML: '<div class="TITLE_CLASS">TITLE</div><br/><div class="ADDRESS_CLASS">ADDRESS</div>',
    	
    	/**
    	 * No results.
    	 */
    	NO_RESULTS: ['No results'],
    	
        /**
         * Constructor.
         * 
         * @param parentContainer A parent container, if required. Position and size will be calculated relative to the parent.
         * @param range The range of coordinates specifying the size of the container.
         * @param containerDivId The page container area.
         * @param headDivId The page head area.
         * @param bodyDivId The page body area (holds the list).
         * @param closeDivId The close page area.
         * @param rowClass The name of the main row class.
         * @param rowAlternateClass The name of the alternate row class.
         * @param columnClass The name of the column class.
         * @param onResultSelectCallback Any function to call on result select (latitude and longitude are passed as parameters). 
         * @param onCloseCallback Any function to call on close.
         */
        initialize: function($super, parentContainer, range, containerDivId, headDivId, bodyDivId, closeDivId,
            rowClass, rowAlternateClass, columnClass, onResultSelectCallback, onCloseCallback)
        {
            // Invoke super class.
            $super(parentContainer, range, true, containerDivId, headDivId, bodyDivId, closeDivId, 
                function(self, onCloseCallback)
                {
                	return function()
                	{
                	   self.close();
                	   if (onCloseCallback)
                	   {
                	       onCloseCallback();
                	   }
                	};
                }(this, onCloseCallback));
            
            // Create list.
            var columnClasses = new Array();
            columnClasses[0] = columnClass;
            this.list = new List(this.bodyDiv, rowClass, rowAlternateClass, columnClasses,
                function(rowData)
                {
                	onResultSelectCallback(rowData.lat, rowData.lng);
                });
                
            // Setup initial state.
            this.list.appendRow(this.NO_RESULTS);
            this.noResults = true;
        },
        
        /**
         * Adds results to the location page.
         * 
         * @param results The results from the location search.
         */
        addResults: function(results)
        {
        	if (this.noResults && results.length > 0)
        	{
        		this.list.clear();
        		this.noResults = false;
        	}
        	
        	for (var index = 0; index < results.length; index++)
            {
                var result = results[index];
                var resultHtml = this.constructResultHtml(result);
                var rowData = new Array();
                rowData[0] = resultHtml;
                this.list.appendRow(rowData, {lat: result.lat, lng: result.lng});
            }
        },
        
        /**
         * Constructs the result HTML
         * 
         * @param result Result object.
         * 
         * @return The result HTML.
         */
        constructResultHtml: function(result)
        {
        	var title = result.title;
            var address = (result.streetAddress != "" ? result.streetAddress + ", " : "")
                + (result.city != "" ? result.city + ", " : "")
                + (result.region != "" ? result.region + ", " : "")
                + result.country;
                
            return title + "<br/>" + address;
        },
        
        /**
         * Closes the location list page.
         */
        close: function()
        {
        	this.hide();
        	this.clearResults();
        },
        
        /**
         * Clears the results.
         */
        clearResults: function()
        {
        	this.list.clear();
        	this.list.appendRow(this.NO_RESULTS);
            this.noResults = true;
        }
    });
}